#ifndef OJLB_OJ_COMMON_OJ_STREA_EDIRECTION_H_
#define OJLB_OJ_COMMON_OJ_STREA_EDIRECTION_H_
#include <fcntl.h>
#include <string>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "oj_common/oj_log.h"
namespace ojlb {
namespace oj_common {


// 类定义
class OjStreaEdirection {
public:
    OjStreaEdirection(std::string file_path);
    void setNewStdInFilePid(); // 把传入的文件重定向为标准输入
    void setNewStdOutFilePid(); // 把传入的文件重定向为标准输出
    void setNewStdErrFilePid(); // 把传入的文件重定向为标准错误
    void resetNewStdInFilePid(); // 恢复标准输入重定向
    void resetNewStdOutFilePid(); // 恢复标准输出重定向
    void resetNewStdErrFilePid(); // 恢复标准错误重定向

private:
    int newOpenCleanFile(const std::string& file_path); // 创建、打开、清空文件
    bool isStreaEdirectionEnble(); // 检查有无发生重定向
    void setStreaEdirection(int save_file_fid, int std); // 重定向的封装实现
    void resetStreaEdirection(int std); // 恢复重定向的封装实现

private:
    std::string file_path_; // 重定向后的文件路径
    int save_std_fid_; // 重定向前的标准流标识符
    int save_file_fid_; // 重定向后的文件流标识符
}; // class OjStreaEdirection end


} // namespace oj_common end
} // namespace ojlb end
#endif